iT邦幫忙

2023 iThome 鐵人賽

DAY 7
0

前言

今天來介紹一下 XSS,在要寫鐵人賽之前,我也只知道基本的原理,如果大家有什麼想要補充的,歡迎留言告訴我!

XSS 種類

依照腳本注入的位置不同,大致可分為 3 種:

  1. Stored (儲存型) XSS: 也有人稱為 Persistent XSS,將腳本存在伺服器的資料庫中,當使用者載入此頁面的時候也會載入此腳本,進而遭受攻擊
  2. Reflected (反射型) XSS: 通常是將腳本放在 URL 中的 GET 參數,使用者點擊後就中招了
  3. DOM XSS: 與反射型類似,大致上是將 DOM 物件帶在 URL 中,載入物件的時候就會觸發

舉個例子🌰

這邊有個簡單的頁面

@app.route('/')
def index():
    search_query = request.args.get('name', '')
    html_response = f"<p>Your name is: {search_query}</p>"
    return html_response

我們在 name 中帶入這段惡意腳本:
<script>alert('XSS Attack');</script>

連結會變成這樣:
http://localhost/?name=<script>alert('XSS Attack');</script>

這時使用者如果點擊了這個連結,伺服器回傳的 response 中就會包含這段惡意腳本,前端的 JS 就會執行這段程式碼。

如果你覺得這段連結一看就很可疑,還可以用 URL encode 來降低戒心:
http://localhost/?name=%3Cscript%3Ealert('XSS%20Attack')%3B%3C%2Fscript%3E

上面這個例子就屬於前一節提到的反射型 XSS

如何防禦

  • 還是那句話:對於使用者輸入的資訊永遠記得過濾檢查
  • 對於欄位的參數可以設定一個合理的長度限制

後記

XSS 除了自己本身的威力以外,還可以和其他手法,例如 CSRF 組成組合技,底下那篇 Cymetrics 部落格的文章就有提到現實世界中的案例,有興趣的務必去了解一下!
至於 CSRF 應該在後面的篇幅中會提到,還請大家繼續收看 XD

Ref

零基礎資安系列(二)-認識 XSS(Cross-Site Scripting)


上一篇
Day 6. Web Security - SQL Injection 實戰
下一篇
Day 8. Web Security - XSS 實戰(上)
系列文
進了資安公司當後端 RD 才入門資安會不會太晚了30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言